#ifndef COMPUTATIONS_
#define COMPUTATIONS_

#include "../SparceMatrix/sparse_matrix.h"
#include "../Containers/NumList.h"
#include "../Containers/ListOfNumList.h"

typedef struct EigenpairAndMatrix
{	
	elem* Vector;	/* The eigenvector.  */
	elem Value;		/* The eigenvalue.   */
} EigenpairAndMatrix;		

elem* ModularityMult(const sparse_matrix_lst* adjMatrix, const elem* degVector,
		elem MInvers, const elem* fVector, elem Norm, const elem* vector);

EigenpairAndMatrix* PowerMethod(const sparse_matrix_lst* adjMatrix,
		const elem* degVector, const elem* modularityMat, const elem* fVec,
		elem precision, elem M, unsigned size);

EigenpairAndMatrix* PowerMethodHelper(const sparse_matrix_lst* adjMatrix,
		const elem* degVector, elem MInvers, const elem* fVector,
		elem Norm, elem* vector, elem precision);

elem* SpectricalDiv (const sparse_matrix_lst* adjMatrix, 
		const elem* degVec, const elem* modularityMat, const elem* fVec, 
		elem precision, elem M, unsigned size, elem* globalDeltaQ);

#endif /*COMPUTATIONS_*/
